agent: Avoid tight timer tick when possible.
authorDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Tue, 1 Nov 2016 04:14:10 +0000 (00:14 -0400)
committerDaniel Kahn Gillmor <dkg@fifthhorseman.net>
Sun, 18 Nov 2018 22:38:30 +0000 (22:38 +0000)
commit82191a77c981ca714d2d259323f75fc54375181e
treea91fb0d705b846fb49d0c4b5a8336c885303b6db
parentb30344303d9bd0af58e39b6cbbc10e7cd5d6f640
agent: Avoid tight timer tick when possible.

* agent/gpg-agent.c (need_tick): Evaluate whether the short-phase
handle_tick() is needed.
(handle_connections): On each cycle of the select loop, adjust whether
we should call handle_tick() or not.
(start_connection_thread_ssh, do_start_connection_thread): Signal the
main loop when the child terminates.
* agent/call-scd.c (start_scd): Call interrupt_main_thread_loop() once
the scdaemon thread context has started up.

--

With this change, an idle gpg-agent that has no scdaemon running only
wakes up once a minute (to check_own_socket).

Thanks to Ian Jackson and NIIBE Yutaka who helped me improve some of
the blocking and corner cases.

Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
Gbp-Pq: Topic gpg-agent-idling
Gbp-Pq: Name agent-Avoid-tight-timer-tick-when-possible.patch
agent/call-scd.c
agent/gpg-agent.c